﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace HessianServerMvc
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801

    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
        }
        //为 ASP.NET 路由操作提供路由的集合。
        public static void RegisterRoutes(RouteCollection routes)
        {
            //ASP.NET Routing的作用有两个：
            // 1.从请求中捕获数据。 
            //2.从数据生成虚拟路径。
            //ASP.NET Routing在生成虚拟路径时还是使用RouteCollection类型上的方法，自然我们是像RouteTable.Routes属性中注册的Routing规则，那么自然也是从RouteTable.Routes属性中获取虚拟路径。
            //RouteCollection类型中有一个GetVirtualPath方法，返回一个VirtualPathData对象，其中包含一个VirtualPath属性，便是最终得到的虚拟路径。
            //IgnoreRoute是定义在ASP.NET MVC中，基于RouteCollection类型的扩展方法。
            //它会向RouteCollection中添加一个Route对象，而这个Route对象在匹配成功时返回的RouteData对象，其RouteHandler属性便为一个StopRoutingHandler，于是余下的Routing规则也不会继续匹配了
            //routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            //routes.IgnoreRoute("{resource}.rem/{*pathInfo}");
            //无论是否是集成还是经典模式，对于MVC这里都需要配置
            //定义不需检查是否匹配路由的 URL 模式。
            routes.IgnoreRoute("{resource}.hessian/{*pathInfo}");
            //routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Start", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Start", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

        }

        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);
        }
    }
}